#!/bin/bash

# JAR包数组
JAR_FILES=("chat-service.jar")
# 定义对应的端口
declare -A SERVICE_PORTS=(
  ["chat-service"]=8085
)

# 显示帮助信息
function show_help() {
  echo "用法: $0 [服务名称]"
  echo "  不带参数: 构建所有服务"
  echo "  服务名称: 构建指定服务，可选值: chat-service, gateway"
}

# 构建单个服务镜像
function build_service() {
  local service_jar="$1.jar"
  local port=${SERVICE_PORTS[$1]}

  # 检查服务是否在我们的列表中
  if [[ -z "$port" ]]; then
    echo "错误: 未知服务 '$1'"
    show_help
    exit 1
  fi

  echo "正在构建 $1 服务镜像..."
  # 检查并删除运行中的容器
  local container_id=$(docker ps -q -f name=$1)
  if [[ -n "$container_id" ]]; then
    echo "正在停止并删除容器: $1..."
    docker stop $container_id
    docker rm $container_id
  fi

  # 检查并删除现有镜像
  local image_id=$(docker images -q $1:latest)
  if [[ -n "$image_id" ]]; then
    echo "正在删除现有镜像: $1:latest..."
    docker rmi $image_id
  fi
  docker build --build-arg JAR_FILE=$service_jar --build-arg PORT=$port -t $1:latest .
  echo "已构建镜像: $1:latest"
}

# 主逻辑
if [[ $# -eq 0 ]]; then
  # 没有参数，构建所有服务
  echo "构建所有服务镜像..."
  for jar in "${JAR_FILES[@]}"
  do
    service_name=$(echo $jar | sed 's/\.jar//')
    build_service $service_name
  done
  echo "所有镜像构建完成！"
  # 启动所有服务
  docker-compose up -d
  echo "所有服务已启动！"
else
  # 有参数，构建指定服务
  build_service $1
fi